1 . 描述性統計

data_summary <- data %>% 
  group_by(工作型態) %>% 
  summarise(
    平均健康分數 = mean(健康狀態分數, na.rm = TRUE),
    平均BMI = mean(BMI, na.rm = TRUE),
    平均睡眠時數 = mean(睡眠時數, na.rm = TRUE),
    樣本數 = n()
  )
data_summary

2 . 資料視覺化

2.1 工作型態與健康分數

plotly::ggplotly(
  ggplot(data, aes(x = 工作型態, y = 健康狀態分數, fill = 工作型態)) +
    geom_boxplot() +
    labs(title = "不同工作型態的健康狀態分數分佈", x = "工作型態", y = "健康狀態分數") +
    theme_minimal()
)
ggplot(data, aes(x = 工作型態, y = 健康狀態分數, fill = 工作型態)) +
  geom_boxplot() +
  labs(title = "不同工作型態的健康狀態分數分佈", x = "工作型態", y = "健康狀態分數") +
  theme_minimal()
DT::datatable(data_summary, options = list(pageLength = 5), 
              caption = "各工作型態描述性統計")

2.2 工作型態與 BMI 分佈

plotly::ggplotly(
  ggplot(data, aes(x = 工作型態, y = BMI, fill = 工作型態)) +
  geom_boxplot() +
  labs(title = "不同工作型態的 BMI 分佈", x = "工作型態", y = "BMI") +
  theme_classic()
)
ggplot(data, aes(x = 工作型態, y = BMI, fill = 工作型態)) +
  geom_boxplot() +
  labs(title = "不同工作型態的 BMI 分佈", x = "工作型態", y = "BMI") +
  theme_classic()

2.3 睡眠時數與健康狀態回歸線圖

plotly::ggplotly(
  ggplot(data, aes(x = 睡眠時數, y = 健康狀態分數)) +
  geom_point(alpha = 0.5, color = "steelblue") +
  geom_smooth(method = "lm", se = TRUE, color = "darkred") +
  labs(title = "睡眠時數與健康狀態分數的線性關係", x = "睡眠時數", y = "健康狀態分數") +
  theme_minimal()
)
## `geom_smooth()` using formula = 'y ~ x'
ggplot(data, aes(x = 睡眠時數, y = 健康狀態分數)) +
  geom_point(alpha = 0.5, color = "steelblue") +
  geom_smooth(method = "lm", se = TRUE, color = "darkred") +
  labs(title = "睡眠時數與健康狀態分數的線性關係", x = "睡眠時數", y = "健康狀態分數") +
  theme_minimal()

2.4 BMI 與健康分數關係

plotly::ggplotly(
  ggplot(data, aes(x = BMI, y = 健康狀態分數, color = 工作型態)) +
  geom_point(alpha = 0.7) +
  geom_smooth(method = "lm", se = FALSE) +
  labs(title = "BMI 與健康狀態分數的關係", x = "BMI", y = "健康狀態分數") +
  theme_light()
)
## `geom_smooth()` using formula = 'y ~ x'
ggplot(data, aes(x = BMI, y = 健康狀態分數, color = 工作型態)) +
  geom_point(alpha = 0.7) +
  geom_smooth(method = "lm", se = FALSE) +
  labs(title = "BMI 與健康狀態分數的關係", x = "BMI", y = "健康狀態分數") +
  theme_light()

2.5 交叉圖表 - 工作型態與 BMI

plotly::ggplotly(
  ggplot(data, aes(x = 工作型態, y = BMI, fill = 工作型態)) +
  geom_boxplot() +
  labs(title = "不同工作型態者的 BMI 分布", x = "工作型態", y = "BMI") +
  theme_minimal()
)
ggplot(data, aes(x = 工作型態, y = BMI, fill = 工作型態)) +
  geom_boxplot() +
  labs(title = "不同工作型態者的 BMI 分布", x = "工作型態", y = "BMI") +
  theme_minimal()

3 . 多元線性回歸分析

3.1 模型建構與結果

lm_model <- lm(健康狀態分數 ~ BMI, data = data)
summary(lm_model)
## 
## Call:
## lm(formula = 健康狀態分數 ~ BMI, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.3730  -3.8976   0.3782   4.5654   7.6958 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  95.5887     3.3730  28.340   <2e-16 ***
## BMI          -0.1268     0.1346  -0.942    0.348    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.127 on 98 degrees of freedom
## Multiple R-squared:  0.008981,   Adjusted R-squared:  -0.001132 
## F-statistic: 0.8881 on 1 and 98 DF,  p-value: 0.3483

3.2 回歸圖與趨勢解釋

ggplot(data, aes(x = BMI, y = 健康狀態分數)) +
  geom_point(alpha = 0.5) +
  geom_smooth(method = "lm", color = "blue", fill = "lightblue") +
  labs(
    title = "BMI 與健康狀態分數的線性回歸關係",
    x = "BMI",
    y = "健康狀態分數"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

3.3 自動摘要段落

intercept <- coef(lm_model)[1]
slope <- coef(lm_model)[2]

cat(sprintf(
  "根據回歸模型分析結果,BMI 對健康狀態分數呈現 %s 線性關係(斜率為 %.2f)。這代表當 BMI 每增加 1,預期健康分數將 %s %.2f 分。",
  ifelse(slope < 0, "負向", "正向"),
  slope,
  ifelse(slope < 0, "下降", "上升"),
  abs(slope)
))
## 根據回歸模型分析結果,BMI 對健康狀態分數呈現 負向 線性關係(斜率為 -0.13)。這代表當 BMI 每增加 1,預期健康分數將 下降 0.13 分。

4 . 交叉統計分析

4.1 建立 BMI 分類欄位

data <- data %>%
  mutate(BMI分類 = case_when(
    BMI < 18.5 ~ "過輕",
    BMI >= 18.5 & BMI < 24 ~ "正常",
    BMI >= 24 & BMI < 27 ~ "過重",
    BMI >= 27 ~ "肥胖",
    TRUE ~ "未知"
  ))

4.2 計算交叉平均健康分數

cross_summary <- data %>%
  group_by(工作型態, BMI分類) %>%
  summarise(
    平均健康分數 = mean(健康狀態分數, na.rm = TRUE),
    樣本數 = n()
  ) %>%
  arrange(工作型態, BMI分類)
## `summarise()` has grouped output by '工作型態'. You can override using the
## `.groups` argument.
cross_summary

4.3 視覺化交叉結果

ggplot(cross_summary, aes(x = BMI分類, y = 平均健康分數, fill = 工作型態)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(
    title = "不同工作型態與 BMI 分類的健康分數差異",
    x = "BMI 分類",
    y = "平均健康分數"
  ) +
  theme_minimal()

5 . 分析摘要

初步分析顯示,不同工作型態之間,在健康狀態分數與 BMI 上存在顯著差異。靜態工作者的 BMI 稍高,健康分數則略低。而從線性回歸結果來看,BMI 與睡眠時數皆對健康狀態分數有顯著解釋力,顯示生活方式因子確實影響健康狀況。

未來若能加入更多樣本與如運動頻率、飲食習慣等變數,將有助於進一步建立健康預測模型。

6 . 簡要分析結論

不同工作型態可能與健康狀態有關,例如靜態工作者可能因長時間久坐導致健康分數偏低。後續可針對不同因子交互影響進行回歸分析與交叉表探討。

7 . 參考資料

  • Google Data Analytics 課程資料參考
  • 模擬資料由使用者 Aladiah Lin 根據主題需求創建
  • 圖表產製工具:R 4.3.0 + RStudio + ggplot2
  • 輸出格式:R Markdown → HTML / PDF

作者: Aladiah Lin
聯絡方式: tsutinglin1982@gmail.com